Lab assignment 1: Classification

 1. Exploratory Data Analysis (EDA)

STEP 1: IMPORT DATASET

STEP 2: CHECK OUT THE MISSING VALUES

STEP 3: PLOT THE DATA AND CHECK OUT FOR OUTLIERS

Functions to obtain outliers, drop outliers, generate histograms and boxplots for each variable

PREGNANT

Conclusión de los outliers para PREGNANT

La mayoría de los casos se dan en 0, 1 y 2 embarazos, como podemos ver en el histograma. 0 embarazos es normal, y 17 embarazos no es muy probable, pero también se puede dar el caso.

Al tratarse de valores que se pueden dar en casos reales, hemos decidido no eliminar o sustituir los outliers por otros valores.

GLUCOSE

El bajo nivel de azúcar en la sangre grave es una emergencia médica. Puede ocasionar crisis epilépticas y daño cerebral. Al nivel de azúcar en la sangre por debajo de los 70 mg/dL se lo considera bajo.

Por lo que en esta variable hemos decidido eliminar los outliers, ya que un valor de glucosa igual a 0 es imposible.

BLOODPRESS

En la variable BLOODPRESS el mínimo es 0, esto significa que la presión arterial demasiado baja, lo que puede provocar la disminución de los niveles de oxígeno del cuerpo y provocar daño al corazón y al cerebro.

Por otra parte, el máximo de presión arterial es 122, se considera una presión arterial alta en torno a 80 en adelante.

Por ambas razones, hemos decidido eliminar los outliers en esta variable.

BODYMASSINDEX

La variable BODYMASSINDEX indica el índice de masa corporal, que se mide teniendo en cuenta el peso y la altura de cada persona.

Hay 11 casos en los que el BODYMASSINDEX es igual a 0, esto significaría que la persona carecería de masa corporal, lo cual es imposible.

Por ambas razones, hemos decidido eliminar los outliers.

INSULIN

La variable INSULINA, lo normal es que sea de 5-26 U/ml. Por lo que en la gráfica de insulina es normal que haya tantos "outliers" alrededor del 0.

SKINTHICKNESS

Para esta variable, vemos en las gráficas que tenemos un gran número de ceros. Esta medida no es un valor normal para medir el valor del grosor de la piel, por lo que suponemos que son medidas que no se tomaron en el momento de analizar al paciente.

PEDIGREEFUNC

Para esta variable PEDIGREEFUNC, la cual nos indica lo relacion que tiene a nivel genetico con la diabetes, cuanto mayor es el valor mas alta es la relación con la patología. Por lo que en este caso los outliers hemos decidio no quitarlos.

AGE

Para esta variable AGE,la cual indica la edad de lsa mujeres a partir de las cuales se ha desarrollado el dataset, como todas tienes mas de 21 años, no hemos eliminado los outliers, ya que todas las observaciones estan hechas a mujeres mayores de 21 años

STEP 4: ENCODE CATEGORICAL VARIABLES

STEP 5: EXPLORATORY ANALYSIS

Correlation plot of numeric variables

Una vez detectada la correlacion entre las variables y la importancia que tienen para el dataset (Cuanto más correladas estén entre ellas, menos informacion aportarán a nuestro modelo) podemos eliminar los outliers que hemos detectado anteriormente en las variables indicadas.

STEP 6: CHECK OUT FOR CLASS IMBALANCES

Como podemos ver en la tabla de frecuencias de la variable salida, hay muchos más registros de la clase 0 que de la clase 1, por lo que esta mso ante unos datos desbalanceados.

Para balancear las clases, vamos a usar la librería imblearn, en concreto, el método de oversampling llamado SMOTE. Este método genera datos sintéticos de la clase minoritaria, para obtener muestras similares a nuestros datos y conseguir balancear las clases del dataset.

TO DO : Comentar que las metricas son muy parecidas entre ellas, por lo que el dataset ha variado muy poco

STEP 7: Split the dataset into train and test

2. Training of Machine Learning models

Vamos a comenzar generando un árbol de decisión, para que nos detecte las variables más significativas de nuestro modelo y podamos hacer pruebas con varias de ellas.

Para este paso, vamos a hacer pruebas con los dos datasets que tenemos:

2.1.- Decision Trees

 2.1.1- TEST WITH THE ORIGINAL DATASET

FALTA INDICAR EL POR QUÉ DE LOS PARÁMETROS

TO DO COMENTAR LOS RESULTADOS DE ESTO

 2.1.1- TEST WITH MODIFICATED DATASET

TO DO: Comentar resultados

2.1 Random Forest

 3.1.1- TEST WITH ORIGINAL DATASET

 3.1.1- TEST WITH MODIFICATED DATASET

3.1 Logistic Regression

 3.1.1- TEST WITH ORIGINAL DATASET

 LO QUE HE HECHO ES DEJAR SOLO LAS QUE SON MAS SIGNIFICANTES EN EL MODELO, PERO EL RESULTADO NO ES MUY BUENO

 3.1.1- TEST WITH MODIFICATED DATASET

ESTE ULTIMO HA MEJORADO RESPECTO A LOS OTROS DOS, VOY A PROBARLO QUITANDOLE UNAS VARIABLES QUE NO SON RELEVANTES

Support Vector Machines (SVM)

Vamos a probar diferentes tipos de svm

Los kernels Polinomial y Radial se utilizan cuando las clases no son linealmente separables, como hemos visto al pintar las gráficas de distribución de los datos, no lo son, por lo tanto usaremos estos dos tipos de kernels

Para diferentes datasets

En primer lugar probamos con el dataset completo

Ahora, probamos con el mismo dataset pero con el kernel radial

Entre ambos modelos, entrenados con el mismo dataset, y configurados con los mismos parámetros, podemos ver que a penas hay diferencia. El accuracy de test en el modelo lineal nos sale 0.78, mientras que en el modelo radial nos sale 0.78.

Vamos a entrenar los mismos modelos ahora, solo que esta vez con un dataset diferente. Usaremos el dataset limpio, sin outliers y con las clases balanceadas, para comprobar si el modelo mejora.


Compare models

Podemos comparar todos los modelos utilizados, segun el dataset, para ver cuáles de ellos y con qué datos nos dan mejores resultados